Model、View、ViewModel 這三個名詞合稱 MVVM,是一種處理 UI 與事務邏輯的架構,類似的架構還有 MVC、MVP,有興趣可以搜尋關鍵字進一步研究。
參照架構開發可以讓元件之間職責分離、分工明確,使程式更好維護、測試。
UI 就是 View,職責就是顯示畫面,並不關心顯示的資料取得或使用者按下按鈕背後做了什麼事。
Model 是資料來源,負責提供資料給 ViewModel。
ViewModel 負責從 Model 獲取資料並提供給 View,大部分的事務邏輯都在這裡處理。
Model 跟 View 一個負責提供資料,一個只負責顯示資料,但兩者直接依賴會造成資料格式會因為 UI 變動被迫跟著變動,所以要交由 ViewModel 處理,ViewModel 單向依賴 Model,由 ViewModel 要向 Model 請求資料,但 ViewModel 跟 View 之間會有雙向互動就比較複雜,常見兩種架構:binding 與 observer pattern,而 Jetpack Compose 推薦後者。
最常見的例子: YouTube 訂閱機制,使用者向頻道「訂閱」,把使用者資訊存在頻道,當頻道發布新影片時,藉由儲存的使用者資訊主動通知使用者。
在 Android 中 ViewModel 會提供 State 給 View,相當於 View 「訂閱」 ViewModel,當 ViewModel 的資料發生改變時通知 View 更新,就可以避免不必要的畫面更新。